/**
 * 邀请码
 */
const {Controller} = require('egg');
class InviteCodeController extends Controller {
    /**
     * 使用邀请码
     */
    async use() {
        const {ctx, app} = this;
        const inviteCode = ctx.request.body.invite_code;
        const code = await app.mysql.get('invite_code', {
                invite_code: inviteCode,
                is_used: 0
        });
        console.log(code)
        if (code === null) {
            ctx.body = {
                success: false,
                message: '邀请码不存在或已使用'
            };
            return
        }
        // 1、设置邀请码为已使用
        await app.mysql.update('invite_code', {
            is_used: 1,
            used_user_id:ctx.currentUser.id,
        }, {
            where: {
                invite_code: inviteCode
            }
        });
        // 2、设置用户为vip
        await app.mysql.update('users', {
            vip_type: code.vip_type,
            vip_expire_time: new Date(new Date().getTime() + 30 * 24 * 60 * 60 * 1000),
        }, {
            where: {
                id: ctx.currentUser.id
            }
        });
        // 3、设置users_vip 记录表
        await app.mysql.insert('users_vip', {
            user_id: ctx.currentUser.id,
            type: code.vip_type,
            start_time: new Date(),
            end_time: new Date(new Date().getTime() + 30 * 24 * 60 * 60 * 1000),
            amount:0,
            invite_code:code.invite_code,
            order_id:0,
        });


        ctx.body = {
            success: true,
            message: '使用邀请码成功'
        };
    }

    /**
     * 获取我构造的邀请码列表
     */
    async list() {
        const {ctx, app} = this;
        const res = await app.mysql.select('invite_code', {
            where: {
                generate_user_id: ctx.currentUser.id
            },
        });
        ctx.body = {
            success: true,
            data: res
        };
    }

    /**
     * 生成邀请码
     */
    async generate() {
        const {ctx, app} = this;
         // 生成八位随机数
        const code = Math.random().toString(36).slice(-32);
        const res = await app.mysql.insert('invite_code', {
            invite_code: code,
            generate_user_id: ctx.currentUser.id,
            is_used: 0,
            create_time: new Date(),
            vip_type: 'month'
        });
        if (res.affectedRows === 1) {
            ctx.body = {
                success: true,
                data: {
                    invite_code: code,
                    id:res.insertId
                }
            };
        }else{
            ctx.body = {
                success: false,
                message: '生成邀请码失败'
            };
        }

    }

}
module.exports = InviteCodeController;